Node.js Assert Module

Node.js assertion

Assert मॉड्यूल क्या है?

Assert मॉड्यूल आपके कोड में स्थिरांक की जांच करने के लिए सरल लेकिन शक्तिशाली अभिकथन परीक्षणों का एक सेट प्रदान करता है।

यह एक कोर Node.js मॉड्यूल है जिसे इंस्टॉलेशन की आवश्यकता नहीं है।

महत्वपूर्ण विशेषताएं:

सरल सत्य/झूठा दावा

सही/गलत मानों की जाँच करना

सख्त और आरामदायक समानता परीक्षण

विभिन्न प्रकार के समानता सत्यापन

गहन सामग्री तुलना

वस्तुओं और सरणियों की सामग्री तुलना

फेंकने और संभालने में त्रुटि

परीक्षणों की जाँच में त्रुटि

एसिंक/प्रतीक्षा विधियों के लिए समर्थन

अतुल्यकालिक कोड का परीक्षण करने की क्षमता

💡नोट:

जबकि जेस्ट या मोचा जैसे परीक्षण ढांचे के रूप में सुविधा संपन्न नहीं है, एसर्ट मॉड्यूल हल्का है और सरल परीक्षण आवश्यकताओं के लिए या जब आप बाहरी निर्भरता से बचना चाहते हैं तो एकदम सही है।

Assert के साथ शुरुआत करना

एक साधारण फ़ंक्शन का परीक्षण करने के लिए एसर्ट मॉड्यूल का उपयोग करने का एक त्वरित उदाहरण यहां दिया गया है:

मूल अभिकथन उदाहरण

const assert = require('assert').strict;

// Function to test
function add(a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new TypeError('Inputs must be numbers');
  }
  return a + b;
}

// Test cases
assert.strictEqual(add(2, 3), 5, '2 + 3 should equal 5');

// Test error case
assert.throws(
  () => add('2', 3),
  TypeError,
  'Should throw TypeError for non-number input'
);

console.log('All tests passed!');

आयात करना और स्थापित करना

आपके Node.js एप्लिकेशन में Assert मॉड्यूल को आयात करने और उपयोग करने के कई तरीके हैं:

कॉमनजेएस आयात करें (नोड.जेएस)

// Basic require
const assert = require('assert');

// Using strict mode (recommended)
const assert = require('assert').strict;

// Destructuring specific methods
const { strictEqual, deepStrictEqual, throws } = require('assert');

// For async/await tests
const { rejects, doesNotReject } = require('assert').strict;

ES Modules (Node.js 12+)

// Using default import
import assert from 'assert';

// Using strict mode with ESM
import { strict as assert } from 'assert';

// Importing specific methods
import { strictEqual, deepStrictEqual } from 'assert';

// Dynamic import
const { strict: assert } = await import('assert');

💡सर्वश्रेष्ठ प्रणालियां:

सख्त विधि की अनुशंसा की जाती है क्योंकि यह अधिक सटीक तुलना और बेहतर त्रुटि संदेश प्रदान करती है।

यह Node.js के भविष्य के संस्करणों के साथ संगत है जहां सख्त मोड डिफ़ॉल्ट है।

महत्वपूर्ण अभिकथन विधियाँ

Assert मॉड्यूल आपके कोड में मूल्यों के बारे में दावा करने के लिए कई तरीके प्रदान करता है।

ये विधियाँ Assert मॉड्यूल के साथ परीक्षण की नींव बनाती हैं।

assert(value[, message])

परीक्षण करता है कि कोई मान सत्य है या नहीं। यदि मान ग़लत है, तो एक AssertionError फेंक दिया जाता है।

const assert = require('assert');

// This will pass
assert(true);
assert(1);
assert('string');
assert({});

try {
  // This will throw an AssertionError
  assert(false, 'This value is not truthy');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

try {
  // These will also throw errors
  assert(0);
  assert('');
  assert(null);
  assert(undefined);
} catch (err) {
  console.error(`Error: ${err.message}`);
}

assert.ok(value[, message])

यहassert() के लिए एक उपनाम है।

const assert = require('assert');

// These assertions are equivalent
assert.ok(true, 'This value is truthy');
assert(true, 'This value is truthy');

मूल्य तुलना

एसर्ट मॉड्यूल मूल्यों की तुलना करने के कई तरीके प्रदान करता है, प्रत्येक प्रकार के जबरदस्ती और वस्तु तुलना के संबंध में अलग-अलग व्यवहार के साथ।

assert.equal(actual, expected[, message])

वास्तविक और अपेक्षित मापदंडों के बीच ढीली, बाध्यकारी समानता का परीक्षण करने के लिए समानता ऑपरेटर (==) का उपयोग करें।

const assert = require('assert');

// These will pass (coercive equality)
assert.equal(1, 1);
assert.equal('1', 1); // String is coerced to number
assert.equal(true, 1); // Boolean is coerced to number

try {
  // This will throw an error
  assert.equal(1, 2, '1 is not equal to 2');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

assert.strictEqual(actual, expected[, message])

सख्त समानता ऑपरेटर (===) का उपयोग करके वास्तविक और अपेक्षित मापदंडों के बीच सख्त समानता का परीक्षण करता है।

const assert = require('assert');

// This will pass
assert.strictEqual(1, 1);

try {
  // These will throw errors (strict equality)
  assert.strictEqual('1', 1, 'String "1" is not strictly equal to number 1');
  assert.strictEqual(true, 1, 'true is not strictly equal to 1');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

💡सर्वश्रेष्ठ प्रणालियां:

अप्रत्याशित प्रकार की ज़बरदस्ती की समस्याओं से बचने के लिए strictEqual() को बराबर() में बदलने की अनुशंसा की जाती है।

वस्तु और अनुक्रम तुलना

वस्तुओं और सरणियों के साथ काम करते समय, आपको केवल उनके नोट्स की तुलना करने के बजाय उनकी सामग्री की तुलना करने के लिए गहन समानता परीक्षणों का उपयोग करना चाहिए।

वस्तुओं और सरणियों की तुलना करने के लिए, Node.js गहरी समानता फ़ंक्शन प्रदान करता है:

assert.deepEqual(actual, expected[, message])

ढीली समानता (==) के साथ वास्तविक और अपेक्षित मापदंडों के बीच गहरी समानता का परीक्षण करता है।

assert.deepStrictEqual(actual, expected[, message])

सख्त समानता (===) के साथ वास्तविक और अपेक्षित मापदंडों के बीच गहरी समानता का परीक्षण करता है।

const assert = require('assert');

// Objects with the same structure
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: '1', b: { c: '2' } };

// These will pass
assert.deepEqual(obj1, obj2);
assert.deepStrictEqual(obj1, obj2);

// This will pass (loose equality)
assert.deepEqual(obj1, obj3);

try {
  // This will throw an error (strict equality)
  assert.deepStrictEqual(obj1, obj3, 'Objects are not strictly deep-equal');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

// Arrays
const arr1 = [1, 2, [3, 4]];
const arr2 = [1, 2, [3, 4]];
const arr3 = ['1', '2', ['3', '4']];

// These will pass
assert.deepEqual(arr1, arr2);
assert.deepStrictEqual(arr1, arr2);

// This will pass (loose equality)
assert.deepEqual(arr1, arr3);

try {
  // This will throw an error (strict equality)
  assert.deepStrictEqual(arr1, arr3, 'Arrays are not strictly deep-equal');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

असमानता और इनकार

समानता की जाँच के साथ, यह जाँचना महत्वपूर्ण है कि मान उन मामलों में समान नहीं हैं जहाँ उन्हें समान नहीं होना चाहिए।

assert.notEqual(actual, expected[, message])

परीक्षण ढीले हैं, असमानता ऑपरेटर (!=) का उपयोग करके असमानता को मजबूर कर रहे हैं।

assert.notStrictEqual(actual, expected[, message])

सख्त असमानता ऑपरेटर (!==) का उपयोग करके सख्त असमानता के लिए परीक्षण।

const assert = require('assert');

// These will pass
assert.notEqual(1, 2);
assert.notStrictEqual('1', 1);

try {
  // This will throw an error
  assert.notEqual(1, '1', '1 is coercively equal to "1"');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

try {
  // This will throw an error
  assert.notStrictEqual(1, 1, '1 is strictly equal to 1');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

गहरी असमानता

assert.notDeepEqual(actual, expected[, message])

शिथिल असमानता के साथ गहरी असमानता का परीक्षण।

assert.notDeepStrictEqual(actual, expected[, message])

सख्त असमानता के साथ गहराई की असमानता का परीक्षण करता है।

const assert = require('assert');

const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 3 };
const obj3 = { a: '1', b: '2' };

// These will pass
assert.notDeepEqual(obj1, obj2);
assert.notDeepStrictEqual(obj1, obj2);
assert.notDeepStrictEqual(obj1, obj3);

try {
  // This will throw an error (loose equality)
  assert.notDeepEqual(obj1, obj3, 'obj1 is loosely deep-equal to obj3');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

त्रुटि प्रबंधन

यह जांचना कि क्या आपके कोड में अपेक्षित त्रुटियां हैं, मजबूत एप्लिकेशन लिखने का एक महत्वपूर्ण हिस्सा है।

Assert मॉड्यूल इस उद्देश्य के लिए कई विधियाँ प्रदान करता है।

assert.throws(fn[, error][, message])

एफएन फ़ंक्शन से त्रुटि उत्पन्न होने की उम्मीद है। अन्यथा, एक AssertionError फेंक दिया जाता है।

const assert = require('assert');

// Function that throws an error
function throwingFunction() {
  throw new Error('Error thrown');
}

// This will pass
assert.throws(throwingFunction);

// Check for a specific error message
assert.throws(
  throwingFunction,
  /Error thrown/,
  'Unexpected error message'
);

// Check for a specific error type
assert.throws(
  throwingFunction,
  Error,
  'Wrong error type'
);

// Check with a validation function
assert.throws(
  throwingFunction,
  function(err) {
    return err instanceof Error && /thrown/.test(err.message);
  },
  'Error validation failed'
);

try {
  // This will throw an AssertionError
  assert.throws(() => {
    // This function doesn't throw
    return 'no error';
  }, 'Expected function to throw');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

assert.doesNotThrow(fn[, error][, message])

यह उम्मीद की जाती है कि fn फ़ंक्शन कोई त्रुटि नहीं देगा। यदि यह फेंकता है, तो त्रुटि प्रसारित होती है।

const assert = require('assert');

// This will pass
assert.doesNotThrow(() => {
  return 'no error';
});

try {
  // This will throw the original error
  assert.doesNotThrow(() => {
    throw new Error('This will be thrown');
  }, 'Unexpected error');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

अतुल्यकालिक कोड का परीक्षण

आधुनिक जावास्क्रिप्ट वादा-आधारित और कॉलबैक-आधारित एसिंक्रोनस कोड का भारी उपयोग करता है।

एसर्ट मॉड्यूल दोनों के परीक्षण के लिए एप्लिकेशन प्रदान करता है।

assert.rejects(asyncFn[, error][, message])

asyncFn एक async फ़ंक्शन का वादा करता है या उसका इंतजार करता है और उम्मीद करता है कि वह अस्वीकार कर देगा।

const assert = require('assert');

async function asyncTest() {
  // Function that returns a rejecting promise
  function failingAsyncFunction() {
    return Promise.reject(new Error('Async error'));
  }

  // This will pass
  await assert.rejects(
    failingAsyncFunction(),
    /Async error/
  );

  // This will also pass
  await assert.rejects(
    async () => {
      throw new Error('Async function error');
    },
    {
      name: 'Error',
      message: 'Async function error'
    }
  );

  try {
    // This will throw an AssertionError
    await assert.rejects(
      Promise.resolve('success'),
      'Expected promise to reject'
    );
  } catch (err) {
    console.error(`Error: ${err.message}`);
  }
}

// Run the async test
asyncTest().catch(err => console.error(`Unhandled error: ${err.message}`));

assert.doesNotReject(asyncFn[, error][, message])

asyncFn एक async फ़ंक्शन का वादा करता है या उसकी प्रतीक्षा करता है और उसके पूरा होने की अपेक्षा करता है।

const assert = require('assert');

async function asyncTest() {
  // This will pass
  await assert.doesNotReject(
    Promise.resolve('success')
  );

  // This will also pass
  await assert.doesNotReject(
    async () => {
      return 'async function success';
    }
  );

  try {
    // This will throw the original rejection reason
    await assert.doesNotReject(
      Promise.reject(new Error('Failure')),
      'Expected promise to fulfill'
    );
  } catch (err) {
    console.error(`Error: ${err.message}`);
  }
}

// Run the async test
asyncTest().catch(err => console.error(`Unhandled error: ${err.message}`));

अन्य अभिकथन विधियाँ

assert.match(string, regexp[, message])

स्ट्रिंग इनपुट के रेगुलर एक्सप्रेशन से मेल खाने की अपेक्षा करता है।

const assert = require('assert');

// This will pass
assert.match('I love Node.js', /Node\.js/);

try {
  // This will throw an AssertionError
  assert.match('Hello World', /Node\.js/, 'String does not match the pattern');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

assert.fail([message])

दिए गए संदेश या डिफ़ॉल्ट संदेश के साथ एक AssertionError फेंकता है।

const assert = require('assert');

try {
  // This always throws an AssertionError
  assert.fail('This test always fails');
} catch (err) {
  console.error(`Error: ${err.message}`);
}

सख्त तरीका

Node.js assertions .

अधिक पूर्वानुमानित परिणामों के लिए सख्त विधि का उपयोग करने की अनुशंसा की जाती है।

// Import the strict version of assert
const assert = require('assert').strict;

// These are equivalent
assert.strictEqual(1, 1);
assert.equal(1, 1); // In strict mode, this is the same as strictEqual

// These are equivalent
assert.deepStrictEqual({ a: 1 }, { a: 1 });
assert.deepEqual({ a: 1 }, { a: 1 }); // In strict mode, this is the same as deepStrictEqual

try {
  // This will throw an error in strict mode
  assert.equal('1', 1);
} catch (err) {
  console.error(`Error: ${err.message}`);
}

Node.js Assert बनाम परीक्षण फ्रेमवर्क का उपयोग किया जाना चाहिए

Node.js Assert :

  • सरल स्क्रिप्ट या छोटे अनुप्रयोग लिखना
  • विकास के दौरान तीव्र परीक्षण बनाना
  • बाहरी पूर्वाग्रह से बचना चाहते हैं
  • आंतरिक Node.js मॉड्यूल बनाना

परीक्षण ढाँचे (जेस्ट, मोचा, आदि) का उपयोग करते समय:

  • बड़े प्रोजेक्ट पर काम कर रहे हैं
  • जब टेस्ट ड्राइवर, रिपोर्टर और मॉकिंग जैसी सुविधाओं की आवश्यकता होती है
  • ऐसे एप्लिकेशन विकसित करना जिनके लिए व्यापक परीक्षण सामग्री की आवश्यकता होती है
  • जब एक बेहतर त्रुटि रिपोर्टिंग और परीक्षण प्रणाली की आवश्यकता होती है

💡नोट:

गहन एप्लिकेशन परीक्षण के लिए, Node.js v18 में पेश किए गए अंतर्निहित Node.js टेस्ट रनर का उपयोग करने पर विचार करें, या जेस्ट, मोचा, या AVA जैसे समर्पित परीक्षण ढांचे का उपयोग करें।

सारांश

Node.js Assert :

सत्य/झूठा परीक्षण

ज़ोर () और ज़ोर () ठीक है ()

समानता तुलना

equal(), strictEqual(), notEqual(), notStrictEqual()

गहराई से तुलना

deepEqual(), deepStrictEqual(), notDeepEqual(), notDeepStrictEqual()

त्रुटि जाँच

throws(), doesNotThrow(), rejects(), doesNotReject()

अन्य उपयोगी विधियाँ

match(), fail()

सख्त तरीका

अधिक पूर्वानुमानित तुलनाओं के लिए

इन उपकरणों को ठीक से समझकर और उनका उपयोग करके, आप मजबूत कोड लिख सकते हैं, बग्स को तुरंत ढूंढ सकते हैं और अपने एप्लिकेशन की विश्वसनीयता सुनिश्चित कर सकते हैं।

अभ्यास

यह जांचने के लिए किस एस्सर्ट विधि का उपयोग किया जाता है कि क्या दो मान बिल्कुल बराबर हैं?

assert.equal()
✗ ग़लत! assert.equal() प्रकार की ज़बरदस्ती के साथ ढीली समानता की जाँच करता है
assert.strictEqual()
✓ ठीक है! assert.strictEqual() एक वैध तरीका है जिसका उपयोग यह जांचने के लिए किया जाता है कि क्या दो मान बिल्कुल बराबर हैं (बिना किसी प्रकार की जबरदस्ती के)।
assert.deepEqual()
✗ ग़लत! assert.depEqual() वस्तुओं या सरणियों की गहराई से तुलना की जाँच करता है, सख्त समानता की नहीं।
assert.match()
✗ ग़लत! assert.match() जाँचता है कि एक स्ट्रिंग नियमित अभिव्यक्ति से मेल खाती है, समानता से नहीं